package net.lzzy.practices.entities;

import lombok.Getter;
import lombok.Setter;

import javax.persistence.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;

@Entity
@Getter
@Setter
public class User extends BaseEntity{
    @Transient
    public  static  final int TYPE_BANNED=-1;
    @Transient
    public  static  final int TYPE_ADMIN =0;
    @Transient
    public  static  final int TYPE_TEACHER=1;
    @Transient
    public  static  final int TYPE_STUDENT = 2;

    private String nickName;

    private String userName;

    private  String email;

    private  String phone;

    private String password;

    private String avatar;

    private  int  type;

    private String salt;

    private boolean applyTeacher;

    @Temporal(TemporalType.TIMESTAMP)
    private Date createTime;

    @Temporal(TemporalType.TIMESTAMP)
    private Date updateTime;
    //一个老师可以有多个课程
    @OneToMany(mappedBy = "teacher")
    private List<Course> courses =new ArrayList<>();
    //一个学生可以有多个课程
    @ManyToMany(mappedBy = "students")
    private List<Course> enrolledCourses=new ArrayList<>();
    //一个学生可以有多个考试记录
    @OneToMany(mappedBy = "student")
    private List<Result> results=new ArrayList<>();

    @OneToMany(mappedBy = "student")
    private List<Applicant> applicants=new ArrayList<>();

    public User(){
        createTime=new Date();
        updateTime=new Date();
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        User user = (User) o;
        return id.equals(user.id);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id);
    }
}
